package cn.tedu.tmall.admin.mall.configuration;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Knife4j(Swagger)配置类
 * 用于生成和管理API文档
 */
@Configuration
public class Knife4jConfig {

    // 安全方案名称常量
    private static final String SECURITY_SCHEME_NAME = "BearerAuth";

    // 配置Controller包路径（根据您的项目结构调整）
    private static final String CONTROLLER_PACKAGE = "cn.tedu.tmall.admin.mall.controller";

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                // 添加接口全局安全要求
                .addSecurityItem(new SecurityRequirement().addList(SECURITY_SCHEME_NAME))
                // 配置组件安全方案
                .components(new Components()
                        .addSecuritySchemes(SECURITY_SCHEME_NAME,
                                new SecurityScheme()
                                        .name(SECURITY_SCHEME_NAME)
                                        .type(SecurityScheme.Type.HTTP)
                                        .scheme("bearer")
                                        .bearerFormat("JWT")
                                        .in(SecurityScheme.In.HEADER)
                        )
                )
                // 配置API文档信息
                .info(new Info()
                        .title("茶会项目API文档")
                        .description("基于SpringBoot3+MyBatis的茶会系统接口文档")
                        .version("1.0.0")
                        .contact(new Contact()
                                .name("开发者")
                                .email("dev@example.com")
                        )
                );
    }

    /**
     * 配置分组和Controller包扫描路径
     */
    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .group("default") // 分组名称
                .packagesToScan("cn.tedu.tmall.admin.mall.controller") // 指定Controller包路径
                .pathsToMatch("/**") // 匹配所有路径
                .build();
    }
}